/*
  检测数据类型的方法
    1. typeof
      问题：不能严格区分 null object array，其它都行
    
    2. Array.isArray 判断是否是数组

    3. A instanceof B 
      简单理解：检测A是否是B的实例
      真正理解：检测A的隐式原型（走整个原型链）是否在B的显示原型上

        例如：检测是否promise对象

    4. Object.prototype.toString.call(target).slice(8, -1)
      万能方法，啥都能检测

        例如：开发中utils/tools -> 封装检测数据类型的方法：checkType

    5. A === B 
      比较值和类型是否都相等
*/
function instanceOf(a, b) {
  let proto = a.__proto__;
  const prototype = b.prototype;
  while (proto) {
    if (proto === prototype) return true;
    proto = proto.__proto__;
  }
  return false;
}

const $toString = Object.prototype.toString;

function checkType(target) {
  return $toString.call(target).slice(8, -1);
}
